﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Sped.Sped
{
    /// <summary>
    /// REGISTRO 0111 : TABELA DE RECEITA BRUTA MENSAL PARA FINS DE RATEIO DE
    /// CRÉDITOS COMUNS
    /// </summary>
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("SpedPisCofins.Reg0111")]
    [ComVisible(true)]
    public class Reg0111 : IBloco
    {
        /// <summary>
        /// Receita Bruta Não-Cumulativa - Tributada no Mercado Interno
        /// </summary>
        public double REC_BRU_NCUM_TRIB_MI { get; set; }
        /// <summary>
        /// Receita Bruta Não-Cumulativa – Não Tributada no Mercado Interno (Vendas com suspensão,
        /// alíquota zero, isenção e sem incidência das contribuições)
        /// </summary>
        public double REC_BRU_NCUM_NT_MI { get; set; }
        /// <summary>
        /// Receita Bruta Não-Cumulativa – Exportação
        /// </summary>
        public double REC_BRU_NCUM_EXP { get; set; }
        /// <summary>
        /// Receita Bruta Cumulativa
        /// </summary>
        public double REC_BRU_CUM { get; set; }
        /// <summary>
        /// Receita Bruta Total
        /// </summary>
        public double REC_BRU_TOTAL { get; set; }

        public override bool ValidaRegistro(ref string Erro)
        {
            var ValidacaoOK = true;
            Erro = "";

            var Soma = (this.REC_BRU_NCUM_TRIB_MI + this.REC_BRU_NCUM_NT_MI + this.REC_BRU_NCUM_EXP + this.REC_BRU_CUM);
            if (Soma != this.REC_BRU_TOTAL)
            {
                Erro += "\r\n* Registro 0111 - Receita Bruta total difere da soma das Receitas.";
                ValidacaoOK = false;
            }

            return ValidacaoOK;
        }

        public override string Layout()
        {
            var Linha = string.Empty;

            Linha += "0111" + this.Delimitador;
            Linha += this.REC_BRU_NCUM_TRIB_MI.FormatoValorSped(2) + this.Delimitador;
            Linha += this.REC_BRU_NCUM_NT_MI.FormatoValorSped(2) + this.Delimitador;
            Linha += this.REC_BRU_NCUM_EXP.FormatoValorSped(2) + this.Delimitador;
            Linha += this.REC_BRU_CUM.FormatoValorSped(2) + this.Delimitador;
            Linha += this.REC_BRU_TOTAL.FormatoValorSped(2) + this.Delimitador;

            return Linha.Trim();
        }
    }
}
